#pragma once

#include "fepch.h"

#include "FysicsEngine/Core.h"
#include "FysicsEngine/Events/Event.h"

namespace Fysics
{
	class FYSICS_API Window
	{
	public:
		using EventCallbackFn = std::function<void(Event&)>;

		virtual ~Window() {}

		virtual void OnUpdate() = 0;
		virtual unsigned int GetWidth() const = 0;
		virtual unsigned int GetHeight() const = 0;
		virtual void* GetNativeWindow() const = 0;

		virtual void SetEventCallback(const EventCallbackFn& callback) = 0;
		virtual bool IsFullScreen() const = 0;
		virtual void SetFullScreen(bool fullscreen) = 0;
	};

	struct WindowProps
	{
		std::string Title;
		unsigned int Width, Height;

		WindowProps(const std::string& title = "Fysics Engine Light",
			unsigned int width = 1280,
			unsigned int height = 720)
			: Title(title), Width(width), Height(height)
		{

		}
	};

}